home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / usr / share / pyshared / PIL / ContainerIO.py < prev    next >
Text File  |  2006-12-03  |  3KB  |  117 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: ContainerIO.py 2134 2004-10-06 08:55:20Z fredrik $
  4. #
  5. # a class to read from a container file
  6. #
  7. # History:
  8. # 1995-06-18 fl     Created
  9. # 1995-09-07 fl     Added readline(), readlines()
  10. #
  11. # Copyright (c) 1997-2001 by Secret Labs AB
  12. # Copyright (c) 1995 by Fredrik Lundh
  13. #
  14. # See the README file for information on usage and redistribution.
  15. #
  16.  
  17. ##
  18. # A file object that provides read access to a part of an existing
  19. # file (for example a TAR file).
  20.  
  21. class ContainerIO:
  22.  
  23.     ##
  24.     # Create file object.
  25.     #
  26.     # @param file Existing file.
  27.     # @param offset Start of region, in bytes.
  28.     # @param length Size of region, in bytes.
  29.  
  30.     def __init__(self, file, offset, length):
  31.         self.fh = file
  32.         self.pos = 0
  33.         self.offset = offset
  34.         self.length = length
  35.         self.fh.seek(offset)
  36.  
  37.     ##
  38.     # Always false.
  39.  
  40.     def isatty(self):
  41.         return 0
  42.  
  43.     ##
  44.     # Move file pointer.
  45.     #
  46.     # @param offset Offset in bytes.
  47.     # @param mode Starting position. Use 0 for beginning of region, 1
  48.     #    for current offset, and 2 for end of region.  You cannot move
  49.     #    the pointer outside the defined region.
  50.  
  51.     def seek(self, offset, mode = 0):
  52.         if mode == 1:
  53.             self.pos = self.pos + offset
  54.         elif mode == 2:
  55.             self.pos = self.length + offset
  56.         else:
  57.             self.pos = offset
  58.         # clamp
  59.         self.pos = max(0, min(self.pos, self.length))
  60.         self.fh.seek(self.offset + self.pos)
  61.  
  62.     ##
  63.     # Get current file pointer.
  64.     #
  65.     # @return Offset from start of region, in bytes.
  66.  
  67.     def tell(self):
  68.         return self.pos
  69.  
  70.     ##
  71.     # Read data.
  72.     #
  73.     # @def read(bytes=0)
  74.     # @param bytes Number of bytes to read.  If omitted or zero,
  75.     #     read until end of region.
  76.     # @return An 8-bit string.
  77.  
  78.     def read(self, n = 0):
  79.         if n:
  80.             n = min(n, self.length - self.pos)
  81.         else:
  82.             n = self.length - self.pos
  83.         if not n: # EOF
  84.             return ""
  85.         self.pos = self.pos + n
  86.         return self.fh.read(n)
  87.  
  88.     ##
  89.     # Read a line of text.
  90.     #
  91.     # @return An 8-bit string.
  92.  
  93.     def readline(self):
  94.         s = ""
  95.         while 1:
  96.             c = self.read(1)
  97.             if not c:
  98.                 break
  99.             s = s + c
  100.             if c == "\n":
  101.                 break
  102.         return s
  103.  
  104.     ##
  105.     # Read multiple lines of text.
  106.     #
  107.     # @return A list of 8-bit strings.
  108.  
  109.     def readlines(self):
  110.         l = []
  111.         while 1:
  112.             s = self.readline()
  113.             if not s:
  114.                 break
  115.             l.append(s)
  116.         return l
  117.